#ifndef GY_ADI_H
#define GY_ADI_H

#include <QGraphicsItem>
#include "GY_ContainerTransform.h"
#include "GY_ControlLibrary_global.h"
#include "GY_ClippingToolContainer.h"
#include "GY_TransformGroup.h"
#include <QGraphicsRectItem>

class GY_CONTROLLIBRARY_EXPORT GY_ADI : public GY_ContainerTransform
{
    Q_OBJECT
public:
    explicit Q_INVOKABLE GY_ADI(const QString &guid,QGraphicsItem *parent = nullptr);
    ~GY_ADI();
    /**
     * @brief setContainerEditPointF 设置编辑点
     */
    void setContainerEditPointF();
    //!继承基类重写
    GY_Object * copyItem(const QString &guid = QString());
    /**
     * @brief addItem 组中添加图元
     * @param item
     * @return
     */
    virtual bool addItem(GY_Object *pItem);
    /**
     * @brief removItem 移除组中的图元
     * @param guid 图元的guid
     * @return 是否移除成功
     */
    virtual bool removItem(const QString &guid);
    /**
     * @brief removItem 移除图元
     * @param pItem 图元指针
     * @return 是否移除成功
     */
    virtual bool removItem(const GY_Object *pItem);
private:
    /**
     * @brief m_pRect 剪切矩形大小
     */
    QGraphicsRectItem *m_pRect;
    /**
     * @brief m_pTransFormGroupClipping 控制剪切容器
     */
    GY_ClippingToolContainer* m_pClippingToolContainer;
    /**
     * @brief m_pTransFormGroup 控制旋转容器
     */
    GY_TransformGroup* m_pTransFormGroupRotate;
    /**
     * @brief m_pTransFormGroupSlide 控制俯仰容器
     */
    GY_TransformGroup* m_pTransFormGroupSlide;
private:
    /**
     * @brief initializationPropertyInfo 初始化属性信息
     */
    void initializationPropertyInfo();
    /**
     * @brief UpdateDraw 更新绘制
     */
    void updateDraw();
    /**
     * @brief updatePosition 更新位置
     * @param name 属性名称
     * @param value 位置
     * @return 是否更新成功
     */
    bool updatePosition(const QString &name, const QVariant &value);
    /**
     * @brief updatePoint 更新点位置
     * @param name 属性名称
     * @param value 点位置
     * @return 是否更新成功
     */
    bool updatePoint(const QString &name, const QVariant &value);
    /**
     * @brief updateSize 更新相对点位置
     * @param name 属性名称
     * @param value 相对点位置
     * @return 是否更新成功
     */
    bool updateSize(const QString &name, const QVariant &value);
    /**
     * @brief updateRotationCenter 更新旋转中心
     * @param name 属性名称
     * @param value 旋转中心
     * @return 是否更新成功
     */
    bool updateRotationCenter(const QString &name, const QVariant &value);
    /**
     * @brief updateMaximumPitch 更新最大俯视值
     * @param name 属性名称
     * @param value 最大俯视值
     * @return 是否更新成功
     */
    bool updateMaximumPitch(const QString &name, const QVariant &value);
    /**
     * @brief updateRoll 更新旋转角度
     * @param name 属性名称
     * @param value 旋转角度
     * @return 是否更新成功
     */
    bool updateRoll(const QString &name, const QVariant &value);
    /**
     * @brief updatePitch 更新俯视值
     * @param name 属性名称
     * @param value 俯视值
     * @return 是否更新成功
     */
    bool updatePitch(const QString &name, const QVariant &value);
};

#endif // GY_ADI_H
